package com.itheima.mp.domain.dto;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.mp.domain.po.User;
import com.itheima.mp.domain.vo.UserVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Data
@ApiModel(description = "分页结果")
public class PageDTO<T> {
  @ApiModelProperty("总条数")
  private Long total;
  @ApiModelProperty("总页数")
  private Long pages;
  @ApiModelProperty("集合")
  private List<T> list;

  public static <PO, VO> PageDTO<VO> of(Page<PO> p, Class<VO> clazz) {
    PageDTO<VO> userPageDTO = new PageDTO<>();
    // 1.总条数
    userPageDTO.setTotal(p.getTotal());
    // 2.总页数
    userPageDTO.setPages(p.getPages());
    // 3.当前页数据
    List<PO> records = p.getRecords();
    if (CollUtil.isEmpty(records)) {
      userPageDTO.setList(Collections.emptyList());
      return userPageDTO;
    }
    // 4.拷贝user的VO
    List<VO> userVOS = BeanUtil.copyToList(records, clazz);
    userPageDTO.setList(userVOS);
    // 5.返回
    return userPageDTO;
  }

  public static <PO, VO> PageDTO<VO> of(Page<PO> p, Function<PO, VO> convertor) {
    PageDTO<VO> userPageDTO = new PageDTO<>();
    // 1.总条数
    userPageDTO.setTotal(p.getTotal());
    // 2.总页数
    userPageDTO.setPages(p.getPages());
    // 3.当前页数据
    List<PO> records = p.getRecords();
    if (CollUtil.isEmpty(records)) {
      userPageDTO.setList(Collections.emptyList());
      return userPageDTO;
    }
    // 4.拷贝user的VO
    List<VO> userVOS = records.stream().map(convertor).collect(Collectors.toList());
    userPageDTO.setList(userVOS);
    // 5.返回
    return userPageDTO;
  }
}
